home *** CD-ROM | disk | FTP | other *** search
- # Various utilities for working with nsISupportsPrimitive
- from xpcom import components
-
- _primitives_map = {}
-
- def _build_map():
- ifaces = components.interfaces
- iface = ifaces.nsISupportsPrimitive
- m = _primitives_map
-
- m[iface.TYPE_ID] = ifaces.nsISupportsID
- m[iface.TYPE_CSTRING] = ifaces.nsISupportsCString
- m[iface.TYPE_STRING] = ifaces.nsISupportsString
- m[iface.TYPE_PRBOOL] = ifaces.nsISupportsPRBool
- m[iface.TYPE_PRUINT8] = ifaces.nsISupportsPRUint8
- m[iface.TYPE_PRUINT16] = ifaces.nsISupportsPRUint16
- m[iface.TYPE_PRUINT32] = ifaces.nsISupportsPRUint32
- m[iface.TYPE_PRUINT64] = ifaces.nsISupportsPRUint64
- m[iface.TYPE_PRINT16] = ifaces.nsISupportsPRInt16
- m[iface.TYPE_PRINT32] = ifaces.nsISupportsPRInt32
- m[iface.TYPE_PRINT64] = ifaces.nsISupportsPRInt64
- m[iface.TYPE_PRTIME] = ifaces.nsISupportsPRTime
- m[iface.TYPE_CHAR] = ifaces.nsISupportsChar
- m[iface.TYPE_FLOAT] = ifaces.nsISupportsFloat
- m[iface.TYPE_DOUBLE] = ifaces.nsISupportsDouble
- # Do interface pointer specially - it provides the IID.
- #m[iface.TYPE_INTERFACE_POINTER] = ifaces.nsISupportsDouble
-
- def GetPrimitive(ob):
- if len(_primitives_map)==0:
- _build_map()
-
- prin = ob.QueryInterface(components.interfaces.nsISupportsPrimitive)
- try:
- better = _primitives_map[prin.type]
- except KeyError:
- raise ValueError, "This primitive type (%d) is not supported" % (prin.type,)
- prin = prin.QueryInterface(better)
- return prin.data
-